객체 심볼
#
심볼형자바 스크립트 객체 프로퍼티의 자료형 : 문자형, 심볼형
#
심볼 SymbolSymbol()
유일한 식별자를 만들때 사용함.
#
심볼이름 붙이기- 디버깅시 유용함.
- 이름을 붙여도 심볼이 반환하는 값은 항상 다르다.
#
심볼의 자동형변환- 심볼의 암시적 형변환 X
- 자바스크립트: 문자형으로 암시적 형변환이 비교적 자유로움
-> alert 함수가 거의 모든 값을 인자로 받을 수 있다.
- 심볼을 alert 로 출력하는 방법
.toString()
메서드 호출symbo.description
프로퍼티 사용
#
심볼을 이용한 숨김 프로퍼티숨김 프로퍼티
- 외부 코드에서 접근이 불가능하고 값도 덮어쓸 수 없는 프로퍼티
- 서드 파티 코드는 일반적으로 접근할 수 없다.
- 심볼을 사용하면 서드파티 모르게 user 에 식별자를 부여할 수 있다.
만약 제3의 스크립트가 우리 스크립트와 동일하게 문자열 "id"를 이용해 식별자를 만들었다면
사실상 심볼을 완전히 숨기는 방법은 없다.
Object.getOwnPropertySymbols(obj)
모든 심볼을 볼 수 있다.Reflect.ownKeys(obj)
심볼형 키를 포함한 객체의 모든 키를 반환한다.
#
객체 리터럴에서의 심볼#
심볼은 for…in 에서 배제됨#
Object.assign 은 키가 심볼인 프로퍼티도 복사#
전역 심볼 레지스트리 (global symbol registry)전역 심볼 레지스트리 안에 심볼을 만들고 해당 심볼에 접근하면 항상 동일한 심볼을 반환해준다.
Symbol.for(key)
로 접근 / 생성
- 호출
- 조건에 맞는 심볼 검사
- 없다면 새로운 Symbol(key) 를 만들고 레지스트리 안에 저장함.
- 이름이
key
인 심볼 반환
#
전역 심볼- 전역 심볼 레지스트리 안에 있는 심볼
- 어플리케이션에서 광범위 하게 사용해야 하는 심볼
#
Symbol.keyFor(sym)전역 심볼 레지스트리에서 심볼으로 이름을 얻는 메서드
찾지 못하면
undefined
반환Symbol.for(key)
와 반대됨
- 일반 심볼에서 이름을 얻고 싶을 땐
description
프로퍼티를 사용한다.
#
시스템 심볼자바스크립트 내부에서 사용되는 심볼
- 내장 메서드 등의 기본 동작을 변경할 수 있다.
- iterable 객체 -> Symbol.iterator
- 객체를 원시형으로 변환 -> Symbol.toPrimitive
#
잘 알려진 심볼 well-known-symbolsSymbol.hasInstance
Symbol.isConcatSpreadable
Symbol.iterator
Symbol.toPrimitive
- etc